#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"

using namespace std;
/*HJJ QQ479287006
 *给你一个链表，两两交换其中相邻的节点，并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题（即，只能进行节点交换）。

 

示例 1：


输入：head = [1,2,3,4]
输出：[2,1,4,3]
示例 2：

输入：head = []
输出：[]
示例 3：

输入：head = [1]
输出：[1]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/swap-nodes-in-pairs
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

static ListNode *temp = nullptr;

void det(ListNode *head, ListNode *headpre) {


    if (head == nullptr || head->next == nullptr) {
        return;
    } else {
        //交换节点 并且执行下一个
        ListNode *tnextnext = head->next->next;
        ListNode *tnext = head->next;
        head->next = tnextnext;
        tnext->next = head;
        if (headpre != nullptr) {
            headpre->next = tnext;
        }

        if (temp == nullptr)
            temp = tnext;

        return det(tnextnext, head);
    }

}

ListNode *swapPairs(ListNode *head) {
    det(head, nullptr);

    return temp;

}

/*
 *
 *
 *
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        //1 2 3 4
        //2 1 4 3

        ListNode next = head.next;
        head.next = swapPairs(next.next);
        next.next = head;
        return
        ;
    }
}
 *
 *
 *
 * */